/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package socafeclient;

import entity.Comanda;
import entity.Comandaproducto;
import entity.ComandaproductoPK;
import entity.Productos;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author FRANCO
 */
public class TableModelProductosPedidos extends AbstractTableModel {

    private ArrayList datalist = new ArrayList();
    private String[] columns = {"Cantidad", "Producto", "Precio", "Importe"};
    public List listaDeComandaProducto;
    public double total = 0;
    double subtotal;
    double impuesto;
    private final double DESGLOSE = 1.16;
    private final double IVA = 0.16;
    Comandaproducto elementoComandaProducto;
    public List listaDeComandaProductoElegida;
    Integer cantidadminima=0;

    @Override
    public int getRowCount() {
        return datalist.size();
    }

    @Override
    public int getColumnCount() {
        return columns.length;
    }

    public void addRow(Comandaproducto productoSeleccionado) {

        datalist.add(productoSeleccionado);
        fireTableDataChanged();
    }

    @Override
    public Object getValueAt(int row, int col) {
        Comandaproducto c = (Comandaproducto) datalist.get(row);
        switch (col) {
            case 0: //Cantidad
                return c.getCantidad();
            case 1: //Producto
                return c.getProductos().getNombre();
            case 2: //Precio
                return c.getProductos().getPrecio();
            case 3: //Importe
                return (c.getCantidad() * c.getProductos().getPrecio());
            default:
                return false;
        }

    }

    public void modificarCantidad(int index, int opcion) {
        Comandaproducto cp = (Comandaproducto) datalist.get(index);


        if (opcion == 1) {
            cp.setCantidad(cp.getCantidad() + 1);
        } else {
            cp.setCantidad(cp.getCantidad() - 1);
        }
        datalist.remove(index);
        datalist.add(index, cp);




        fireTableDataChanged();

    }
    
    public Comandaproducto removeComandaAt(int row) {
        Comandaproducto comandaProducto = (Comandaproducto) datalist.remove(row);
        fireTableDataChanged();       
        return comandaProducto;
    }
    
    


    public Comandaproducto getProductosPedidosAt(int row) {
        return (Comandaproducto) datalist.get(row);
    }

   

    public ArrayList getDatalist() {
        return datalist;
    }

    public List listaComandaProductoPedidos(int index) {

        for (int i = 0; i >= datalist.size(); i++) {
            listaDeComandaProductoElegida.add(datalist.get(i));
        }
        return listaDeComandaProductoElegida;
    }

    public void addComandaproductoElegido(Comanda comanda, Productos producto) {
        Comandaproducto elementoSeleccionado;
        
        elementoSeleccionado = new Comandaproducto();
        elementoSeleccionado.setComanda(comanda);
        elementoSeleccionado.setProductos(producto);
        elementoSeleccionado.setComandaproductoPK(new ComandaproductoPK(comanda.getIdcomanda(), producto.getIdproducto()));
        elementoSeleccionado.setCantidad(1);
        elementoSeleccionado.setTerminado(Boolean.FALSE);
        elementoSeleccionado.setImporte(producto.getPrecio() * 1);
        
        
        Iterator iterator = datalist.listIterator();
        Comandaproducto cp;
        boolean agregado=Boolean.FALSE;
        while (iterator.hasNext()) {
            cp = (Comandaproducto) iterator.next();
            
            if(cp.getProductos().equals(elementoSeleccionado.getProductos())){
                cp.setCantidad(cp.getCantidad()+1);
                agregado=Boolean.TRUE;
            }
            
         }
        if(agregado==Boolean.FALSE){
        datalist.add(elementoSeleccionado);
        
        }
        fireTableDataChanged();
    }
    
    public void delComandaproductoElegido(Comanda comanda, Productos producto) {
        Comandaproducto elementoSeleccionadoBorrar;
        
        elementoSeleccionadoBorrar = new Comandaproducto();
        elementoSeleccionadoBorrar.setComanda(comanda);
        elementoSeleccionadoBorrar.setProductos(producto);
        elementoSeleccionadoBorrar.setComandaproductoPK(new ComandaproductoPK(comanda.getIdcomanda(), producto.getIdproducto()));
        elementoSeleccionadoBorrar.setCantidad(1);
        elementoSeleccionadoBorrar.setTerminado(Boolean.FALSE);
        elementoSeleccionadoBorrar.setImporte(producto.getPrecio() * 1);
        
        
        Iterator iterator = datalist.listIterator();
        Comandaproducto cp;
        
        while (iterator.hasNext()) {
            cp = (Comandaproducto) iterator.next();
            
            if(cp.getProductos().equals(elementoSeleccionadoBorrar.getProductos())){
                cp.setCantidad(cp.getCantidad()-1);
                
            }
            
         }
        
        fireTableDataChanged();
    }

    
    
    
    public void addComandaproducto(Comanda comanda) {

        List l = Main.comandaproductoFacade.findList(comanda.getIdcomanda());
        datalist.clear();
        Iterator iterator = l.listIterator();
        Comandaproducto cp;
        while (iterator.hasNext()) {
            cp = (Comandaproducto) iterator.next();
            datalist.add(cp);
        }


        fireTableDataChanged();

    }

    public void addComandaproducto(List<Comandaproducto> comandaProducto) {

        List l = comandaProducto;
        datalist.clear();
        Iterator iterator = l.listIterator();
        Comandaproducto cp;
        while (iterator.hasNext()) {
            cp = (Comandaproducto) iterator.next();
            datalist.add(cp);
        }

        fireTableDataChanged();

    }

    public TableModelProductosPedidos() {
        datalist.clear();
    }

    public double getTotal() {
        return total;
    }

    public double getSubtotal() {
        DecimalFormat formateador = new DecimalFormat("###0. ##");
        try {
            subtotal = formateador.parse(formateador.format(total / DESGLOSE)).doubleValue();
        } catch (ParseException ex) {
            Logger.getLogger(Caja.class.getName()).log(Level.SEVERE, null, ex);
        }

        return subtotal;
    }

    public double getImpuesto() {
        DecimalFormat formateador = new DecimalFormat("###0. ##");
        try {
            impuesto = formateador.parse(formateador.format((total / DESGLOSE) * IVA)).doubleValue();
        } catch (ParseException ex) {
            Logger.getLogger(Caja.class.getName()).log(Level.SEVERE, null, ex);
        }
        return impuesto;
    }

    @Override
    public String getColumnName(int i) {
        return columns[i];
    }

    @Override
    public boolean isCellEditable(int row, int col) {
        switch (col) {
            case 0: //Cantidad
                return false;
            case 1: //Producto
                return false;
            case 2: //Precio
                return false;
            case 3: //Importe
                return false;
            default:
                return false;
        }
    }

    @Override
    public Class getColumnClass(int col) {
        switch (col) {
            case 0: //Cantidad
                return Integer.class;
            case 1: //Nombre Producto
                return String.class;
            case 2: //Precio
                return Double.class;
            case 3: //Importe
                return Double.class;
            default:
                return null;
        }
    }
}
